'''
Created on 2011-8-12

@author: Administrator
'''
import json
import web
from web.contrib.template import render_mako
class TGBaseHandler:
    def __init__(self, templates_path):
        self.mako_render = render_mako(
            directories=[templates_path,],
            input_encoding='utf-8',
            output_encoding='utf-8'
        )
    # 默认支持两种 format render
    # html render 使用 mako 模板
    def html_render(self, page, result):
        return getattr(self.mako_render, page)(**result)
    def json_render(self, page, result):
        return json.dumps(result)
    # 自动调用相应的 format render
    def render(self, page, format, result):
        try:
            render_func=getattr(self, format + '_render')
        except AttributeError:
            raise "Invalide render format!"
        return render_func(page, result)
# format : html/json/xml...
# 默认为 html format，只需要提供 page 参数，其它 format 可以不需要 page 参数
def expose(page='', format='html'):
    def expose_wrapper(fn):
        def format_wrapper(self, *args, **kwargs):
            result=fn(self, *args, **kwargs)
            if 'format' in result.keys(): # 自动选择相应的 format
                format = result['format']
                del result['format']
            return self.render(page, format, result)
        return format_wrapper
    return expose_wrapper